#include "qpainterdrawable.h"
#include "ui_qpainterdrawable.h"
#include <QPainter>
#include "globalresource.h"

QPainterDrawable::QPainterDrawable(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::QPainterDrawable)
{
#ifdef  Debug_Falg
    qDebug() << "The name is : <" << __func__ << "> The file is :<" << __FILE__ << ">Thread is <" << QThread::currentThreadId();
#endif
    ui->setupUi(this);
//    setStyleSheet("background: transparent;");
}

QPainterDrawable::~QPainterDrawable()
{
    delete ui;
}

void QPainterDrawable::paintEvent(QPaintEvent *)
{
    // 使用 QMutexLocker 自动加锁和解锁互斥锁 m_mutex，保证线程安全
    QMutexLocker locker(&m_mutex);
    // 检查图像对象是否为空
    if (img.isNull()) {
        // 如果图像为空，直接返回，不进行绘制操作
        return;
    }
    // 创建一个 QPainter 对象，用于在当前窗口上进行绘图操作
    QPainter painter(this);

    // 以下代码被注释掉，可能是预留的绘图操作
    //    //    p.translate(X, Y);
    //    //    p.drawImage(QRect(0, 0, W, H), img);
    // 创建一个 QRect 对象，指定图像绘制的位置和大小
    QRect rect = QRect(x_, y_, img.width(), img.height());
    // 调用 QPainter 的 drawImage 函数，在指定位置绘制图像
    painter.drawImage(rect, img);
}

QPainterDrawable::OnPlay(QString strFile)
{
#ifdef  Debug_Falg
    qDebug() << "The name is : <" << __func__ << "> The file is :<" << __FILE__ << ">Thread is <" << QThread::currentThreadId();
#endif
}

void QPainterDrawable::mouseDoubleClickEvent(QMouseEvent *e)
{
    emit SigPlayOrPause();
}


bool QPainterDrawable::Init()
{
#ifdef  Debug_Falg
    qDebug() << "The name is : <" << __func__ << "> The file is :<" << __FILE__ << ">Thread is <" << QThread::currentThreadId();
#endif
    // 调用 ConnectSignalSlots 函数连接信号槽，如果失败则返回 false
    if (ConnectSignalSlots() == false)
    {
        return false;
    }

    // 以下代码被注释掉，可能是预留的界面初始化操作
    //ui->label->setUpdatesEnabled(false);

    // 初始化成功，返回 true
    return true;
}



bool QPainterDrawable::ConnectSignalSlots()
{
#ifdef  Debug_Falg
    qDebug() << "The name is : <" << __func__ << "> The file is :<" << __FILE__ << ">Thread is <" << QThread::currentThreadId();
#endif
    // 定义一个布尔值列表，用于存储每个信号槽连接的结果
    QList<bool> listRet;
    // 定义一个布尔变量，用于临时存储单个信号槽连接的结果
    bool bRet;

    // 连接当前对象的 SigPlay 信号到当前对象的 OnPlay 槽函数
    bRet = connect(this, &QPainterDrawable::SigPlay, this, &QPainterDrawable::OnPlay);
    // 将信号槽连接的结果添加到列表中
    listRet.append(bRet);

    // 设置定时器的时间间隔为 2000 毫秒
    timerShowCursor.setInterval(2000);
    // 连接定时器的 timeout 信号到当前对象的 OnTimerShowCursorUpdate 槽函数
//    bRet = connect(&timerShowCursor, &QTimer::timeout, this, &QPainterDrawable::OnTimerShowCursorUpdate);
    // 将信号槽连接的结果添加到列表中
    listRet.append(bRet);

    // 遍历信号槽连接结果列表
    for (bool bReturn : listRet)
    {
        // 如果有连接失败的情况，返回 false
        if (bReturn == false)
        {
            return false;
        }
    }

    // 所有信号槽都连接成功，返回 true
    return true;
}
